/*
This file is part of the iText (R) project.
Copyright (c) 1998-2025 Apryse Group NV
Authors: Apryse Software.

This program is offered under a commercial and under the AGPL license.
For commercial licensing, contact us at https://itextpdf.com/sales.  For AGPL licensing, see below.

AGPL licensing:
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.
*/
using iText.Kernel.Pdf;

namespace iText.Kernel.Pdf.Annot {
    public class PdfFixedPrint : PdfObjectWrapper<PdfDictionary> {
        public PdfFixedPrint()
            : this(new PdfDictionary()) {
        }

        public PdfFixedPrint(PdfDictionary pdfObject)
            : base(pdfObject) {
            pdfObject.Put(PdfName.Type, PdfName.FixedPrint);
        }

        public virtual iText.Kernel.Pdf.Annot.PdfFixedPrint SetMatrix(PdfArray matrix) {
            GetPdfObject().Put(PdfName.Matrix, matrix);
            return this;
        }

        public virtual iText.Kernel.Pdf.Annot.PdfFixedPrint SetMatrix(float[] matrix) {
            GetPdfObject().Put(PdfName.Matrix, new PdfArray(matrix));
            return this;
        }

        public virtual iText.Kernel.Pdf.Annot.PdfFixedPrint SetHorizontalTranslation(float horizontal) {
            GetPdfObject().Put(PdfName.H, new PdfNumber(horizontal));
            return this;
        }

        public virtual iText.Kernel.Pdf.Annot.PdfFixedPrint SetVerticalTranslation(float vertical) {
            GetPdfObject().Put(PdfName.V, new PdfNumber(vertical));
            return this;
        }

        public virtual PdfArray GetMatrix() {
            return GetPdfObject().GetAsArray(PdfName.Matrix);
        }

        public virtual PdfNumber GetHorizontalTranslation() {
            return GetPdfObject().GetAsNumber(PdfName.H);
        }

        public virtual PdfNumber GetVerticalTranslation() {
            return GetPdfObject().GetAsNumber(PdfName.V);
        }

        protected internal override bool IsWrappedObjectMustBeIndirect() {
            return true;
        }
    }
}
